﻿using MyCompany.MyProject.Model.Models.RootKey;
using SqlSugar;

namespace MyCompany.MyProject.Model.Models;

/// <summary>
/// 路由菜单表
/// </summary>
public class Permission : PermissionRoot<long>, IDeleteFilter
{
    /// <summary>
    /// 菜单执行Action名
    /// </summary>
    [SugarColumn(Length = 50, IsNullable = true)]
    public string? Code { get; set; }
    /// <summary>
    /// 菜单显示名（如用户页、编辑(按钮)、删除(按钮)）
    /// </summary>
    [SugarColumn(Length = 50, IsNullable = true)]
    public string? Name { get; set; }
    /// <summary>
    /// 是否是按钮
    /// </summary>
    public bool IsButton { get; set; } = false;
    /// <summary>
    /// 是否是隐藏菜单
    /// </summary>
    [SugarColumn(IsNullable = true)]
    public bool? IsHide { get; set; } = false;
    /// <summary>
    /// 是否keepAlive
    /// </summary>
    [SugarColumn(IsNullable = true)]
    public bool? IskeepAlive { get; set; } = false;


    /// <summary>
    /// 按钮事件
    /// </summary>
    [SugarColumn(Length = 100, IsNullable = true)]
    public string? Func { get; set; }

    /// <summary>
    /// 排序
    /// </summary>
    public int OrderSort { get; set; }
    /// <summary>
    /// 菜单图标
    /// </summary>
    [SugarColumn(Length = 100, IsNullable = true)]
    public string? Icon { get; set; }
    /// <summary>
    /// 菜单描述    
    /// </summary>
    [SugarColumn(Length = 100, IsNullable = true)]
    public string? Description { get; set; }
    /// <summary>
    /// 激活状态
    /// </summary>
    public bool Enabled { get; set; }
    /// <summary>
    /// 创建ID
    /// </summary>
    [SugarColumn(IsNullable = true)]
    public long? CreateId { get; set; }
    /// <summary>
    /// 创建者
    /// </summary>
    [SugarColumn(Length = 50, IsNullable = true)]
    public string? CreateBy { get; set; }
    /// <summary>
    /// 创建时间
    /// </summary>
    [SugarColumn(IsNullable = true)]
    public DateTime? CreateTime { get; set; } = DateTime.Now;
    /// <summary>
    /// 修改ID
    /// </summary>
    [SugarColumn(IsNullable = true)]
    public long? ModifyId { get; set; }
    /// <summary>
    /// 修改者
    /// </summary>
    [SugarColumn(Length = 50, IsNullable = true)]
    public string? ModifyBy { get; set; }
    /// <summary>
    /// 修改时间
    /// </summary>
    [SugarColumn(IsNullable = true)]
    public DateTime? ModifyTime { get; set; } = DateTime.Now;

    /// <summary>
    ///获取或设置是否禁用，逻辑上的删除，非物理删除
    /// </summary>
    [SugarColumn(IsNullable = true)]
    public bool? IsDeleted { get; set; }


    [SugarColumn(IsIgnore = true)]
    public List<string> PnameArr { get; set; } = new List<string>();
    [SugarColumn(IsIgnore = true)]
    public List<string> PCodeArr { get; set; } = new List<string>();
    [SugarColumn(IsIgnore = true)]
    public string MName { get; set; }

    [SugarColumn(IsIgnore = true)]
    public bool hasChildren { get; set; } = true;

    [SugarColumn(IsIgnore = true)]
    public List<Permission> Children { get; set; } = new List<Permission>();

    [SugarColumn(IsIgnore = true)]
    public Modules Module { get; set; }

    //public virtual ICollection<ModulePermission> ModulePermission { get; set; }
    //public virtual ICollection<RoleModulePermission> RoleModulePermission { get; set; }
}
